package com.groupseven.backend.services;

import com.groupseven.backend.domain.Permission.PermissionItem;
import com.groupseven.backend.domain.Role.Role;
import com.groupseven.backend.domain.Sidebar.MySidebar;
import com.groupseven.backend.domain.Sidebar.SidebarItems;
import com.groupseven.backend.domain.Sidebar.SidebarMap;
import com.groupseven.backend.domain.Sidebar.SubSidebarMap;
import com.groupseven.backend.domain.User.User;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface AuthoritiesService {
    /**
     * @Author 王志华
     * 通过判断User类型获取相应的侧边栏
     * @param user 用户类型
     * @return SidebarItems类型
     */
    List<SidebarItems> getSidebar(User user);

    /**
     * @Author 王志华
     * @param user
     * @return
     */
    List<SidebarItems> getSubSidebar(User user);

    /**
     * @Author 王志华
     * @param user
     * @return
     */
    MySidebar getMySidebar(User user);

    /**
     * @Author 王志华
     * @return
     */
    List<SidebarMap> getSidebarMap();

    /**
     * @Author 王志华
     * @return
     */
    List<SubSidebarMap> getSubSidebarMap();

    /**
     * @Author 王志华
     * @param mysidebar
     * @return
     */
    int modifyMySidebar(MySidebar mysidebar);

    /**
     * @Author 王志华
     * @param user
     * @return
     */
    List<String> getMyOperationAuthorities(User user);

    /**
     * @Author 王志华
     * @param user
     * @return
     */
    Set<String> getPermissionsByUsername (User user);

    /**
     * @Author 王志华
     * @param Usertype
     * @return
     */
    Set<String> getPermissionsByUsertype(int Usertype);

//    /**
//     * @Author 王志华
//     * @param permissions
//     * @return
//     */
//    int updateUserPermissions(Set<Permission> permissions, String username);

    /**
     * @Author 王志华
     * @param Username
     * @return
     */
    int resetUserPermissions(String Username);

    /**
     * @Author 王志华
     * @param Rolenumber
     * @return
     */
    List<PermissionItem> getParentPermissiontreeByRolenumber(int Rolenumber);

    /**
     * @Author 王志华
     * @param Rolenumber
     * @return
     */
    List<PermissionItem> getSubPermissiontreeByRolenumber(int Rolenumber);

    /**
     * @Author 王志华
     * @return
     */
    List<PermissionItem> getParentPermissions();

    /**
     * @Author 王志华
     * @return
     */
    List<PermissionItem> getSubPermissions();

    /**
     * @Author 王志华
     * @param Rolenumber
     * @param Permissions
     * @return
     */
    int updateRolePermission(int Rolenumber,int[] Permissions);

    /**
     * @Author 王志华
     * @param Rolenumber
     * @param Permissions
     * @return
     */
    int updateRolePermissions(int Rolenumber, Map<String,Object> Permissions);

    /**
     * @Author 王志华
     * @param roles
     * @return
     */
    boolean multi_deleteByRolenumber(List<Role> roles);

    Set<String> getPermissionsByRole (User user);

}
